home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / angtrain.lha / trainer1.s < prev   
Encoding:
Text File  |  1980-02-15  |  32.5 KB  |  1,722 lines

  1. ;Intro coded by Corto in 1990 
  2. ;Only for Angels members !
  3.  
  4. ;
  5.  
  6.  
  7. org $40000
  8. load $40000
  9.  
  10. run:
  11. movem.L d0-d7/a0-a6,-(sp)
  12. lea $50000,a0
  13. move #24575,d7
  14. run1:
  15. move.b #$0,(a0)+
  16. dbra d7,run1
  17. lea $56000,a1
  18. move #37887,d7
  19. run2:clr.l (a1)+
  20. dbra d7,run2
  21. move sin+$200,sin200+2
  22. move cos+$200,cos200+2
  23. move sin+$200,sin200b+2
  24. move cos+$200,cos200b+2
  25. move sin+$600,sin600+2
  26. move cos+$600,cos600+2
  27. move sin+$600,sin600b+2
  28. move cos+$600,cos600b+2
  29. bsr.L save_all
  30. bsr.L makecopper
  31. lea $dff000,a6
  32. move #$3fff,$9a(a6)
  33. move #$c010,$9a(a6)
  34. move #$3fff,$96(a6)
  35. move #$83c0,$96(a6)
  36. move.l #irq,$6c
  37. move.L #%111101111011100111101111,$50000+38
  38. move.L #%100001001010100011001001,$50000+44+38
  39. move.L #%100001001011100011001001,$50000+88+38
  40. move.l #%100001001010010011001001,$50000+132+38
  41. move.l #%111101111010010011001111,$50000+176+38
  42. move.l    #$56000+[48*80]+2,a2 ;70=No de ligne
  43. bsr makmask
  44.  
  45. affiche:
  46. lea    fonts,a1
  47. clr.w    d0
  48. lettre:
  49. lea    text1(pc),a0
  50. lea    quelle(pc),a3
  51. add.w    (a3),a0
  52. move.b    (a0),d0
  53. addq.w    #1,(a3)
  54. nextline:
  55. cmpi.b    #$fe,d0
  56. bne.s    dernier
  57. add.l    #[48*8]-40,a2
  58. bra.s    lettre
  59. dernier:
  60. tst.b    d0
  61. beq.L    suite
  62. espace:
  63. cmpi.b    #$20,d0
  64. bne.s    noespace
  65. add.w    #96,a1
  66. bra.s    affichelettre
  67. noespace:
  68. sub.b    #$2b,d0
  69. add.b    d0,d0
  70. add.w    d0,a1
  71. affichelettre:
  72. bsr.l    affichefont
  73. addq.l    #1,a2
  74. bra.s    affiche
  75.  
  76. affichefont:
  77. move.b    (a1),(a2)
  78. move.b    [$62*1](a1),[48*1](a2)
  79. move.b    [$62*2](a1),[48*2](a2)
  80. move.b    [$62*3](a1),[48*3](a2)
  81. move.b    [$62*4](a1),[48*4](a2)
  82. move.b    [$62*5](a1),[48*5](a2)
  83. rts
  84.  
  85. puton:
  86. move.l    #$56000+[48*80]+[5*8*48]+34,a2
  87. add.L d0,a2
  88. lea fonts+[["N"-$2b]*2],a1
  89. bsr affichefont
  90. addq.l #1,a2
  91. lea fonts+96,a1
  92. bsr affichefont
  93. rts
  94.  
  95. putoff:
  96. move.l    #$56000+[48*80]+[5*8*48]+34,a2
  97. add.L d0,a2
  98. lea fonts+[["F"-$2b]*2],a1
  99. bsr affichefont
  100. addq.l #1,a2
  101. lea fonts+[["F"-$2b]*2],a1
  102. bsr affichefont
  103. rts
  104.  
  105. text1:
  106. dc.b "                PRESENTS                ",$FE
  107. DC.B "                                        ",$FE
  108. DC.B "           XXXXXX MEGATRAINER           ",$fe
  109. dc.b "                                        ",$fe
  110. dc.b "                                        ",$fe
  111. DC.B "      F1 - UNLIMITED CREDITS   OFF      ",$FE
  112. DC.B "      F2 - UNLIMITED ENERGY    OFF      ",$FE
  113. DC.B "      F3 - UNLIMITED LIVES     OFF      ",$FE
  114. DC.B "      F4 - UNLIMITED TIME      OFF      ",$FE
  115. dc.b "                                        ",$FE
  116. dc.b "                                        ",$fe
  117. dc.b "  PRESS LEFT MOUSEBUTTON TO START GAME  ",0
  118. even
  119. quelle:dc.w 0
  120.  
  121. rout1:move d0,6(a0)
  122. swap d0
  123. move d0,2(a0)
  124. addq.L #8,a0
  125. rts
  126.  
  127. suite:
  128. lea copspr,a0
  129. move.L #set1,d0
  130. bsr.s rout1
  131. move.l #set2,d0
  132. bsr.s rout1
  133. move.l #set3,d0
  134. bsr.s rout1
  135. move.l #set4,d0
  136. bsr.s rout1
  137. move.l #set5,d0
  138. bsr.s rout1
  139. move.l #set6,d0
  140. bsr.s rout1
  141. move.l #setf,d0
  142. bsr.s rout1
  143. move.l #setf,d0
  144. bsr.s rout1
  145.  
  146. jsr init_music
  147. lea $dff000,a6
  148. move.L #$3c791cc9,$8e(a6)
  149. move.l #$3000d8,$92(a6)
  150. move.L #copperlist,$80(a6)
  151. clr $88(a6)
  152. wait:
  153. tst flag1
  154. bne wait1
  155. ;bsr jongle
  156. bsr bras
  157. move #1,flag1
  158. wait1:
  159. btst #6,$bfe001
  160. bne.s wait
  161. wb:btst #$e,2(a6)
  162. bne.s wb
  163. bsr.L restore_all
  164. jsr end_music
  165. movem.L (sp)+,d0-d7/a0-a6
  166. rts
  167. flag:dc.w -1
  168. flag1:dc.w 0
  169. juga:dc.w 0
  170. jugw:dc.w 50
  171.  
  172. makmask:
  173. lea bob1,a0
  174. lea mask1,a1
  175. bsr masque1
  176. lea bob2,a0
  177. lea mask2,a1
  178. bsr masque1
  179. lea bob8,a0
  180. lea mask8,a1
  181. bsr masque1
  182. move #4,d6
  183. lea bob3,a0
  184. lea mask3,a1
  185. masl1:
  186. bsr masque2
  187. ;addi.l #192,a0
  188. ;addi.l #192,a1
  189. dbra d6,masl1
  190.  
  191. lea bob9,a0
  192. lea mask9,a1
  193. bsr masque2
  194. rts
  195.  
  196. masque1:
  197. move #31,d7
  198. masq1:
  199. move.L (a0),d0
  200. addq.L #6,a0
  201. or.l (a0),d0
  202. addq.l #6,a0
  203. or.l (a0),d0
  204. addq.L #6,a0
  205. move.l d0,(a1)+
  206. clr (a1)+
  207. move.l d0,(a1)+
  208. clr (a1)+
  209. move.l d0,(a1)+
  210. clr (a1)+
  211. dbra d7,masq1
  212. rts
  213.  
  214. masque2:
  215. move #15,d7
  216. masq2:
  217. move (a0),d0
  218. addq.L #4,a0
  219. or.w (a0),d0
  220. addq.l #4,a0
  221. or.w (a0),d0
  222. addq.L #4,a0
  223. move d0,(a1)+
  224. clr (a1)+
  225. move d0,(a1)+
  226. clr (a1)+
  227. move d0,(a1)+
  228. clr (a1)+
  229. dbra d7,masq2
  230. rts
  231.  
  232. irq:
  233. movem.L d0-d7/a0-a6,-(a7)
  234. lea $dff000,a6
  235. bsr altern
  236. bsr cycle
  237. bsr.L stars
  238. jsr play
  239. lea $dff000,a6
  240. move #$8400,$96(a6)
  241. cyc:btst #$e,2(a6)
  242. bne.s cyc
  243. move #$400,$96(a6)
  244. tst flag
  245. bne irq1
  246. bsr.L clear
  247. bsr.L copscroll
  248. bsr.L print
  249. bsr touche
  250. move #$8400,$96(a6)
  251. cyc2:btst #$e,2(a6)
  252. bne.s cyc2
  253. move #$400,$96(a6)
  254. move #1,flag
  255. irq4:move #$10,$9c(a6)
  256. movem.L (a7)+,d0-d7/a0-a6
  257. rte
  258.  
  259. irq1:
  260. tst flag1
  261. beq irq4
  262. move #$8400,$96(a6)
  263. cyc4:btst #$e,2(a6)
  264. bne.s cyc4
  265. move #$400,$96(a6)
  266. bsr.L bob
  267. ;move #$f00,$180(a6)
  268. move #$8400,$96(a6)
  269. cyc3:btst #$e,2(a6)
  270. bne.s cyc3
  271. move #$400,$96(a6)
  272. ;move #$ff0,$180(a6)
  273. move #$10,$9c(a6)
  274. clr flag
  275. clr flag1
  276. movem.L (a7)+,d0-d7/a0-a6
  277. rte
  278. t1:dc.l 0
  279. t2:dc.l 0
  280. altern:
  281. tst flag
  282. bne alt1
  283. move.L bpw1,d0
  284. move.L bpa1,bpw1
  285. move.l d0,bpa1
  286. move d0,copbpl3+6
  287. swap d0
  288. move d0,copbpl3+2
  289. swap d0
  290. addi.L #64,d0
  291. move d0,copbpl3+14
  292. swap d0
  293. move d0,copbpl3+10
  294. swap d0
  295. addi.L #64,d0
  296. move d0,copbpl3+22
  297. swap d0
  298. move d0,copbpl3+18
  299. alt1:rts
  300.  
  301. touche:
  302. btst #3,$bfed01
  303. beq touche5
  304. move.b $bfec01,d0
  305. bset #6,$bfee01
  306. not.b d0
  307. ror.b #1,d0
  308. moveq #$32,d7
  309. touchetempo:dbra d7,touchetempo
  310. bclr #6,$bfee01
  311. cmpi.b #$50,d0
  312. beq f1
  313. cmpi.b #$51,d0
  314. beq f2
  315. cmpi.b #$52,d0
  316. beq f3
  317. cmpi.b #$53,d0
  318. beq f4
  319. touche5:rts
  320.  
  321. etat1:dc.b 0    ;off
  322. etat2:dc.b 0
  323. etat3:dc.b 0
  324. etat4:dc.b 0
  325.  
  326. f1:
  327. clr.L d0
  328. lea etat1,a0
  329. bchg #0,(a0)
  330. bra change
  331. f2:
  332. move.l #[8*48],d0
  333. lea etat2,a0
  334. bchg #0,(a0)
  335. bra change
  336. f3:
  337. move.l #[16*48],d0
  338. lea etat3,a0
  339. bchg #0,(a0)
  340. bra change
  341. f4:
  342. move.l #[24*48],d0
  343. lea etat4,a0
  344. bchg #0,(a0)
  345. bra change
  346.  
  347. change:
  348. btst #0,(a0)
  349. beq toff
  350. addi #32,calcule+2
  351. bra puton
  352. toff:subi #32,calcule+2
  353. bra putoff
  354.  
  355. stars:
  356. lea set5+1,a0
  357. move #15,d7
  358. spriteloop:
  359. addq.B #5,(a0)
  360. add.l #8,a0
  361. dbra d7,spriteloop
  362. lea set6+1,a0
  363. move #15,d7
  364. spriteloopa:
  365. addq.B #6,(a0)
  366. add.l #8,a0
  367. dbra d7,spriteloopa
  368. lea set3+1,a0
  369. move #21,d7
  370. spriteloop2:
  371. addq.b #3,(a0)
  372. add.l #8,a0
  373. dbra d7,spriteloop2
  374. lea set4+1,a0
  375. move #21,d7
  376. sprite2loopa:
  377. addq.B #4,(a0)
  378. add.L #8,a0
  379. dbra d7,sprite2loopa
  380. lea set1+1,a0
  381. move #31,d7
  382. spriteloop3:
  383. addq.b #1,(a0)
  384. add.l #8,a0
  385. dbra d7,spriteloop3
  386. lea set2+1,a0
  387. move #31,d7
  388. spriteloop3a:
  389. addq.b #2,(a0)
  390. add.l #8,a0
  391. dbra d7,spriteloop3a
  392. rts
  393.  
  394. text:
  395. dc.b "      ... AND THIS TIME, THE WONDERFUL   A N G E L S   "
  396. DC.B "BRING YOU  XXXXXXX  MEGATRAINER !  GREETINGS TO ALL OUR "
  397. DC.B "FRIENDS AND CONTACTS ...   INTRO CODED BY CORTO. "
  398. dc.b "A SPECIAL HELLO TO RED SECTOR, THE FIRST VERSION OF THIS"
  399. DC.B " INTRO WAS MADE FOR THEM !                   "
  400. DC.B "                         ",0
  401. even
  402. textptr:dc.l text
  403.  
  404. cycle:btst #$e,2(a6)
  405. bne cycle
  406. move.l #$e9f00000,$40(a6)
  407. move.l #-1,$44(a6)
  408. move.L #$56000+[210*48],$50(a6)
  409. move.l #$56000+[210*48]-2,$54(a6)
  410. move.l #$00000,$64(a6)
  411. move #344,$58(a6)
  412. rts
  413.  
  414. print:
  415. tst pra
  416. bne printa
  417. lea $56000+[210*48]+44,a2
  418. move.L textptr,a0
  419. clr d0
  420. move.b (a0)+,d0
  421. tst.b (a0)
  422. bne print1
  423. lea text,a0
  424. print1:move.l a0,textptr
  425.  
  426. lea    fonts,a1
  427. espace1:
  428. cmpi.b    #$20,d0
  429. bne.s    noespace1
  430. add.w    #96,a1
  431. bra.s    affichefont1
  432. noespace1:
  433. sub.b    #$2b,d0
  434. add.b    d0,d0
  435. add.w    d0,a1
  436. affichelettre1:
  437. bra.l    affichefont1
  438.  
  439. affichefont1:
  440. move.b    (a1),(a2)
  441. move.b    [$62*1](a1),[48*1](a2)
  442. move.b    [$62*2](a1),[48*2](a2)
  443. move.b    [$62*3](a1),[48*3](a2)
  444. move.b    [$62*4](a1),[48*4](a2)
  445. move.b    [$62*5](a1),[48*5](a2)
  446. printa:bchg #0,pra
  447. rts
  448.  
  449. pra:dc.w 0
  450.  
  451.  
  452. clear:move #$34,$66(a6)
  453. move.l bpw1,d0
  454. addi.L #[10*3*64]+16,d0
  455. move.l d0,$54(a6)
  456. move.L #$1000000,$40(a6)
  457. move #38400+6,$58(a6)
  458. rts
  459.  
  460. spball:dc.w 0
  461. balls:dc.w 0
  462.  
  463. moveball:
  464. lea boules+2,a0
  465. tst balls
  466. bne mb1
  467. add #12,spball
  468. move spball,d0
  469. sub d0,(a0)
  470. cmpi #-1400,(a0)
  471. blo mb2
  472. rts
  473. mb2:move #-1,balls
  474. add d0,(a0)
  475. rts
  476. mb1:
  477. sub #12,spball
  478. move spball,d0
  479. add d0,(a0)
  480. tst spball
  481. beq mb3
  482. rts
  483. mb3:clr balls
  484. move #$200,bra1
  485. rts
  486.  
  487. bras:    ;lea sin cos deja fait
  488. bsr moveball
  489. lea sin,a0
  490. lea cos,a1
  491. lea hand+2,a2
  492. move bra1,d6
  493. addi #72,d6
  494. andi #$7fe,d6
  495. move d6,bra1
  496. move.L #38*8,d0
  497. muls (a1,d6.w),d0
  498. asr.L #5,d0
  499. asr.l #8,d0
  500. addi #12,d0
  501. ;move d0,(a2)
  502. move d0,18(a2)
  503. addq.l #6,a2
  504.  
  505. move.L #75*8,d0
  506. muls (a1,d6.w),d0
  507. asr.L #5,d0
  508. asr.l #8,d0
  509. subi #25,d0
  510. ;move d0,(a2)
  511. move d0,18(a2)
  512. addq.L #6,a2
  513.  
  514. move.L #100*8,d0
  515. muls (a1,d6.w),d0
  516. asr.L #5,d0
  517. asr.l #8,d0
  518. subi #50,d0
  519. ;move d0,(a2)
  520. move d0,18(a2)
  521.  
  522. calcule:
  523. addi #0,z+2
  524. andi #$7fe,z+2
  525. ;lea sin,a0    ;deja fait
  526. ;lea cos,a1
  527. lea jug,a2
  528. lea coord,a3
  529. lea val,a4
  530. sub.l a5,a5
  531. movem.L vide,d0-d7
  532. calculoop:
  533. movem.w (a2)+,d0/d1/d2
  534. move d0,d5
  535. move d1,d6
  536. sin200:muls #,d0    
  537. cos200:muls #,d1
  538. sub.l d1,d0
  539. cos200b:muls #,d5
  540. move d6,d1
  541. sin200b:muls #,d1
  542. add.l d5,d1
  543. asr.l #8,d0
  544. asr.l #2,d0
  545. asr.l #8,d1
  546. asr.l #2,d1
  547. y:move #$600,d3
  548. move d1,d5
  549. move d2,d6
  550. sin600:muls #,d1
  551. cos600:muls #,d2
  552. sub.l d2,d1
  553. cos600b:muls #,d5
  554. move d6,d2
  555. sin600b:muls #,d2
  556. add.l d5,d2
  557. asr.l #2,d1
  558. asr.l #8,d2
  559. asr.l #2,d2
  560. z:move #$200,d3
  561. move d2,d5
  562. move d0,d6
  563. muls (a0,d3),d2
  564. muls (a1,d3),d0
  565. sub.l d0,d2
  566. muls (a1,d3),d5
  567. move d6,d0
  568. muls (a0,d3),d0
  569. add.l d5,d0
  570. asr.l #2,d0
  571. asr.l #8,d2
  572. asr.l #6,d2
  573.  
  574. add #300,d2
  575. divs d2,d0
  576. divs d2,d1
  577. move d2,(a4)+
  578. cmpi #3,a5
  579. blo cal0
  580. addi #[41*64]+16,d0
  581. addi #[111*16],d1
  582. bra cal1
  583. cal0:addi #[40*64]-48,d0
  584. addi #[111*16],d1
  585. cal1:
  586. asr #4,d0
  587. asr #4,d1
  588. move d0,d2
  589. lsr #3,d0
  590. bclr #0,d0
  591. and #$f,d2
  592. lsl #6,d1
  593. ;muls #3,d1
  594. move d1,d6
  595. add d6,d1
  596. add d6,d1
  597. add d1,d0
  598. swap d0
  599. clr d0
  600. swap d0
  601. ;add.l bpw1,d0
  602. move.l d0,(a3)+
  603. ror #4,d2
  604. move d2,(a3)+
  605. or #$fca,d2
  606. move d2,(a3)+
  607. add #1,a5
  608. cmpi #$7777,(a2)
  609. bne.L calculoop
  610. move #$7777,(a3)
  611. move #$7777,(a4)
  612.  
  613. lea ordre,a0
  614. lea val,a1
  615. clr.L d0
  616. loop1:
  617. move.L d0,d1
  618. add.l #2,d1
  619. loop2:
  620. move (a0,d0.w),d2
  621. move (a0,d1.w),d3
  622. lsl #1,d2
  623. lsl #1,d3
  624. move (a1,d2.w),d4
  625. move (a1,d3.w),d5
  626. cmp d5,d4
  627. bge noexg
  628. lsr #1,d2
  629. lsr #1,d3
  630. move d2,(a0,d1.w)
  631. move d3,(a0,d0.w)
  632. noexg:
  633. addq.L #2,d1
  634. cmpi #$7777,(a0,d1.w)
  635. bne loop2
  636. add.l #2,d0
  637. cmpi #$7777,2(a0,d0.w)
  638. bne loop1
  639. clr.l d0
  640. rts
  641.  
  642. bob:
  643. lea ordre,a1
  644. lea bo,a4
  645. lea coord,a3
  646. move.l #$ffff0000,$44(a6)
  647. clr.L $62(a6)
  648. move #$8400,$96(a6)
  649. move.l bpw1,d0
  650. bobl1:
  651. btst #$e,2(a6)
  652. bne bobl1
  653. move (a1)+,d2
  654. lsl #3,d2
  655. ;clr.L d1
  656. move.l (a3,d2.w),d1
  657. add.L d0,d1
  658. ;move 4(a3,d2.w),d5
  659. ;lsl #1,d2
  660. move.l (a4,d2.w),d4
  661. move.l d4,$4c(a6)
  662. move.L 4(a4,d2.w),$50(a6)
  663. move.l d1,$48(a6)
  664. move.L d1,$54(a6)
  665. cmpi.L #bob1,d4
  666. beq bobb2
  667. cmpi.L #bob2,d4
  668. beq bobb2
  669. cmpi.l #bob8,d4
  670. beq bobb2
  671. move #$3c,$60(a6)
  672. move #$3c,$66(a6)
  673. ;move d5,$42(a6)
  674. ;or #$fca,d5
  675. ;move d5,$40(a6)
  676. move 4(a3,d2.w),$42(a6)
  677. move 6(a3,d2.w),$40(a6)
  678. move #3074,$58(a6)
  679. cmpi #$7777,(a1)
  680. bne bobl1
  681. rts
  682.  
  683. bobb2:
  684. move #$3a,$60(a6)
  685. move #$3a,$66(a6)
  686. ;move d5,$42(a6)
  687. ;or #$fca,d5
  688. ;move d5,$40(a6)
  689. move 4(a3,d2.w),$42(a6)
  690. move 6(a3,d2.w),$40(a6)
  691. move #6147,$58(a6)
  692. cmpi #$7777,(a1)
  693. bne bobl1
  694. rts
  695.  
  696.  
  697. copscroll:
  698. lea cop1+6,a0
  699. move #94,d7
  700. move (a0),d0
  701. cops1:
  702. move 12(a0),(a0)
  703. move 12(a0),4(a0)
  704. add.L #12,a0
  705. dbra d7,cops1
  706. move d0,(a0)
  707. move d0,4(a0)
  708. rts
  709.  
  710. save_all:
  711. move.L 4,a6
  712. jsr -132(a6)
  713. move.b #%10000111,$bfd100
  714. move.l $6c,save_vecteur_irq
  715. move.w $dff01c,save_intena
  716. or.w #$c000,save_intena
  717. move.w $dff002,save_dmacon
  718. or.w #$8100,save_dmacon
  719. rts
  720. restore_all:
  721. move.l save_vecteur_irq,$6c
  722. move.w #$7fff,$dff09a
  723. move.w save_intena,$dff09a
  724. move.w #$7fff,$dff096
  725. move.w save_dmacon,$dff096
  726. move.l 4,a6
  727. lea name_glib,a1
  728. moveq #0,d0
  729. jsr -552(a6)
  730. move.l d0,a0
  731. move.l 38(a0),$dff080
  732. clr.w $dff088
  733. move.L 4,a6
  734. jsr -138(a6)
  735. rts
  736. save_intena:dc.w 0
  737. save_dmacon:dc.w 0
  738. save_vecteur_irq:dc.l 0
  739. name_glib:dc.b "graphics.library",0
  740. even
  741.  
  742. makecopper:
  743. lea cop1,a0
  744. move.L #$8bdffffe,d0
  745. move #95,d6
  746. mcl0:
  747. move.l d0,(a0)+
  748. move.L #$1920000,(a0)+
  749. move.l #$1960000,(a0)+
  750. add.L #$1000000,d0
  751. dbra d6,mcl0
  752.  
  753. lea cop1+6,a0
  754. lea deg,a1
  755. move #5,d6
  756. mcl5:
  757. move (a1)+,d0
  758. move (a1)+,d1
  759. move (a1),d2
  760. move #15,d7
  761. mcl6:
  762. move d0,(a0)
  763. move d0,4(a0)
  764. add.L #12,a0
  765. add d1,d0
  766. dbra d7,mcl6
  767. dbra d6,mcl5
  768.  
  769. move.l #logo,d0
  770. move #2,d7
  771. lea copbpl4+4,a0
  772. mcl9:
  773. move d0,6(a0)
  774. swap d0
  775. move d0,2(a0)
  776. swap d0
  777. addi.l #[44*36],d0
  778. addq.l #8,a0
  779. dbra d7,mcl9
  780. rts
  781. mcs1:dc.w 0
  782.  
  783. deg:dc.W $f00,$10,$ff0,-$100,$f0,1,$ff,-$10,$f,$100,$f0f,-1
  784. copperlist:
  785. dc.L $10ffffe,$920030,$9400d8,$9683e0
  786. copspr:dc.L $1200000,$1220000,$1240000,$1260000,$1280000,$12a0000
  787. dc.L $12c0000,$12e0000,$1300000,$1320000,$1340000,$1360000,$1380000
  788. dc.l $13a0000,$13c0000,$13e0000
  789. dc.l $1020000,$1040000,$1080094,$10a0004,$1000200
  790. dc.w    $0180,$0000 ,$0192,$0000
  791.  
  792. dc.w    $0180,$0000 ,$0182,$0eca ,$0184,$035e ,$0186,$023a
  793. dc.w    $0188,$0126 ,$018a,$0cc0 ,$018c,$0c80 ,$018e,$0c50
  794. dc.w    $01a0,$0000 ,$01a2,$099a ,$01a4,$0778 ,$01a6,$0334
  795. dc.w    $01a8,$0000 ,$01aa,$0667 ,$01ac,$0445 ,$01ae,$0223
  796. dc.w    $01b0,$0000 ,$01b2,$0fff ,$01b4,$0aaa ,$01b6,$0666
  797.  
  798. dc.w    $0190,$0000 ,$0192,$0e11 ,$0194,$0c12 ,$0196,$0b23
  799. dc.w    $0198,$0923 ,$019a,$0723 ,$019c,$0622 ,$019e,$0412
  800.  
  801. dc.L $1b80000,$1ba0000,$1bc0000,$1be0000
  802. dc.L $200ffffe,$9683e0
  803. copbpl1:dc.W $e4,5,$e6,$6000,$ec,5,$ee,$6030
  804. copbpl3:dc.w $e0,0,$e2,0,$e8,0,$ea,0,$f0,0,$f2,0
  805.  
  806. copscr1:dc.L $3d0ffffe,$1005600
  807. dc.L $400ffffe,$1800002
  808. dc.L $410ffffe,$1800004
  809. dc.L $420ffffe,$1800007
  810. dc.L $430ffffe,$1800004
  811. dc.l $440ffffe,$1800002
  812. dc.L $44dffffe,$1800000,$10a0000,$450ffffe
  813. copbpl4:
  814. dc.l $1006600,$e40000,$e60000,$ec0000,$ee0000,$f40000,$f60000
  815. dc.L $68dffffe,$1005600
  816. dc.w $e4,6,$e6,$b000,$ec,6,$ee,$b000
  817.  
  818. dc.L $7edffffe
  819. dc.w $e4,5,$e6,$6c90,$ec,5,$ee,$6cc0
  820. dc.L $1005600,$10a0004,$1040040
  821. dc.L $1940888
  822. cop1:blk.b 96*12
  823. dc.L $1920fff,$1960fff
  824. dc.l $ffdffffe
  825. dc.L $d0ffffe,$192000f,$1940880,$196000f
  826. dc.L $150ffffe,$9c8010,$1000200,$1840fff,$1860fff,$1820004
  827. dc.l $1a20000,$1a40000,$1a60000,$1aa0000,$1ac0000,$1ae0000
  828. dc.l $1b20000,$1b40000,$1b60000,$e00005,$e20000,$1080000
  829. dc.L $160ffffe,$1001200,$960020
  830. bar1:dc.L $1800002,$1820fff
  831. dc.L $170ffffe
  832. bar2:dc.l $1800004,$1820eee
  833. dc.L $180ffffe
  834. bar3:dc.L $1800007,$1820ddd
  835. dc.L $190ffffe
  836. bar4:dc.L $1800004,$1820ccc
  837. dc.l $1a0ffffe
  838. bar5:dc.L $1800002,$1820bbb
  839.  
  840. dc.L $1b0ffffe
  841. dc.L $1000200,$1800000
  842. dc.L -2
  843.  
  844. bpa1:dc.L bp3
  845. bpw1:dc.L bp4
  846.  
  847. ***************************************************************
  848. **  Amiga FUTURE COMPOSER V1.0 / 1.2 / 1.3   Replay routine  **
  849. ***************************************************************
  850.  
  851. END_MUSIC:
  852. ;clr.w onoff
  853. clr.l $dff0a6
  854. clr.l $dff0b6
  855. clr.l $dff0c6
  856. clr.l $dff0d6
  857. move.w #$000f,$dff096
  858. rts
  859.  
  860. INIT_MUSIC:
  861. ;move.w #1,onoff
  862. lea MODULE(pc),a0
  863. lea 100(a0),a1
  864. lea    SEQpoint(pc),a5
  865. move.l a1,(a5)
  866. move.l a0,a1
  867. add.l 8(a0),a1
  868. lea    PATpoint(pc),a5
  869. move.l a1,(a5)
  870. move.l a0,a1
  871. add.l 16(a0),a1
  872. lea    FRQpoint(pc),a5
  873. move.l a1,(a5)
  874. move.l a0,a1
  875. add.l 24(a0),a1
  876. lea    VOLpoint(pc),a5
  877. move.l a1,(a5)
  878. move.l 4(a0),d0
  879. divu #13,d0
  880.  
  881. lea 40(a0),a1
  882. lea SOUNDINFO+4(pc),a2
  883. moveq #10-1,d1
  884. initloop:
  885. move.w (a1)+,(a2)+
  886. move.l (a1)+,(a2)+
  887. addq.w #4,a2
  888. dbf d1,initloop
  889. moveq #0,d2
  890. move.l a0,d1
  891. add.l 32(a0),d1
  892. lea    waveforms(pc),a5
  893. sub.l a5,d1
  894. lea SOUNDINFO(pc),a0
  895. move.l d1,(a0)+
  896. moveq #9-1,d3
  897. initloop1:
  898. move.w (a0),d2
  899. add.l d2,d1
  900. add.l d2,d1
  901. addq.w #6,a0
  902. move.l d1,(a0)+
  903. dbf d3,initloop1
  904.  
  905. move.l SEQpoint(pc),a0
  906. moveq #0,d2
  907. move.b 12(a0),d2        ;Get replay speed
  908. bne.s speedok
  909. move.b #3,d2            ;Set default speed
  910. speedok:
  911. lea    respcnt(pc),a5
  912. move.w d2,(a5)        ;Init repspeed counter
  913. lea    repspd(pc),a5
  914. move.w d2,(a5)
  915. INIT2:
  916. lea    audtemp(pc),a5
  917. clr.w (a5)
  918. move.w #$000f,$dff096        ;Disable audio DMA
  919. move.w #$0780,$dff09a        ;Disable audio IRQ
  920. moveq #0,d7
  921. mulu #13,d0
  922. moveq #4-1,d6            ;Number of soundchannels-1
  923. lea V1data(pc),a0        ;Point to 1st voice data area
  924. lea silent(pc),a1
  925. lea o4a0c8(pc),a2
  926. initloop2:
  927. move.l a1,10(a0)
  928. move.l a1,18(a0)
  929. clr.l 14(a0)
  930. clr.b 45(a0)
  931. clr.b 47(a0)
  932. clr.w 8(a0)
  933. clr.l 48(a0)
  934. move.b #$01,23(a0)
  935. move.b #$01,24(a0)
  936. clr.b 25(a0)
  937. clr.l 26(a0)
  938. clr.w 30(a0)
  939. moveq #$00,d3
  940. move.w (a2)+,d1
  941. move.w (a2)+,d3
  942. divu #$0003,d3
  943. move.b d3,32(a0)
  944. mulu #$0003,d3
  945. andi.l #$00ff,d3
  946. andi.l #$00ff,d1
  947. addi.l #$dff0a0,d1
  948. move.l d1,a6
  949. move.l #$0000,(a6)
  950. move.w #$0100,4(a6)
  951. move.w #$0000,6(a6)
  952. move.w #$0000,8(a6)
  953. move.l d1,60(a0)
  954. clr.w 64(a0)
  955. move.l SEQpoint(pc),(a0)
  956. move.l SEQpoint(pc),52(a0)
  957. add.l d0,52(a0)
  958. add.l d3,52(a0)
  959. add.l d7,(a0)
  960. add.l d3,(a0)
  961. move.w #$000d,6(a0)
  962. move.l (a0),a3
  963. move.b (a3),d1
  964. andi.l #$00ff,d1
  965. lsl.w #6,d1
  966. move.l PATpoint(pc),a4
  967. adda.w d1,a4
  968. move.l a4,34(a0)
  969. clr.l 38(a0)
  970. move.b #$01,33(a0)
  971. move.b #$02,42(a0)
  972. move.b 1(a3),44(a0)
  973. move.b 2(a3),22(a0)
  974. clr.b 43(a0)
  975. clr.b 45(a0)
  976. clr.w 56(a0)
  977. adda.w #$004a,a0    ;Point to next voice's data area
  978. dbf d6,initloop2
  979. rts
  980.  
  981. PLAY:
  982. lea pervol(pc),a6
  983. ;tst.w onoff
  984. ;bne.s music_on
  985. ;rts
  986. music_on:
  987. lea    respcnt(pc),a5
  988. subq.w #1,(a5)            ;Decrease replayspeed counter
  989. bne.s nonewnote
  990. move.w repspd(pc),(a5)        ;Restore replayspeed counter
  991. lea V1data(pc),a0        ;Point to voice1 data area
  992. bsr.L new_note
  993. lea V2data(pc),a0        ;Point to voice2 data area
  994. bsr.L new_note
  995. lea V3data(pc),a0        ;Point to voice3 data area
  996. bsr.L new_note
  997. lea V4data(pc),a0        ;Point to voice4 data area
  998. bsr.L new_note
  999.  
  1000. nonewnote:
  1001. lea    audtemp(pc),a5
  1002. clr.w (a5)
  1003. lea V1data(pc),a0
  1004. bsr.L effects
  1005. move.w d0,(a6)+
  1006. move.w d1,(a6)+
  1007. lea V2data(pc),a0
  1008. bsr.L effects
  1009. move.w d0,(a6)+
  1010. move.w d1,(a6)+
  1011. lea V3data(pc),a0
  1012. bsr.L effects
  1013. move.w d0,(a6)+
  1014. move.w d1,(a6)+
  1015. lea V4data(pc),a0
  1016. bsr.L effects
  1017. move.w d0,(a6)+
  1018. move.w d1,(a6)+
  1019. lea pervol(pc),a6
  1020. move.w audtemp(pc),d0
  1021. ori.w #$8000,d0            ;Set/clr bit = 1
  1022. move.w d0,-(a7)
  1023. moveq #0,d1
  1024. move.l start1(pc),d2        ;Get samplepointers
  1025. move.w offset1(pc),d1        ;Get offset
  1026. add.l d1,d2            ;Add offset
  1027. move.l start2(pc),d3
  1028. move.w offset2(pc),d1
  1029. add.l d1,d3
  1030. move.l start3(pc),d4
  1031. move.w offset3(pc),d1
  1032. add.l d1,d4
  1033. move.l start4(pc),d5
  1034. move.w offset4(pc),d1
  1035. add.l d1,d5
  1036. move.w ssize1(pc),d0        ;Get sound lengths
  1037. move.w ssize2(pc),d1
  1038. move.w ssize3(pc),d6
  1039. move.w ssize4(pc),d7
  1040. move.w (a7)+,$dff096        ;Enable audio DMA
  1041. chan1:
  1042. lea V1data(pc),a0
  1043. tst.w 72(a0)
  1044. beq.l chan2
  1045. subq.w #1,72(a0)
  1046. cmpi.w #1,72(a0)
  1047. bne.s chan2
  1048. clr.w 72(a0)
  1049. move.l d2,$dff0a0        ;Set soundstart
  1050. move.w d0,$dff0a4        ;Set soundlength
  1051. chan2:
  1052. lea V2data(pc),a0
  1053. tst.w 72(a0)
  1054. beq.s chan3
  1055. subq.w #1,72(a0)
  1056. cmpi.w #1,72(a0)
  1057. bne.s chan3
  1058. clr.w 72(a0)
  1059. move.l d3,$dff0b0
  1060. move.w d1,$dff0b4
  1061. chan3:
  1062. lea V3data(pc),a0
  1063. tst.w 72(a0)
  1064. beq.s chan4
  1065. subq.w #1,72(a0)
  1066. cmpi.w #1,72(a0)
  1067. bne.s chan4
  1068. clr.w 72(a0)
  1069. move.l d4,$dff0c0
  1070. move.w d6,$dff0c4
  1071. chan4:
  1072. lea V4data(pc),a0
  1073. tst.w 72(a0)
  1074. beq.s setpervol
  1075. subq.w #1,72(a0)
  1076. cmpi.w #1,72(a0)
  1077. bne.s setpervol
  1078. clr.w 72(a0)
  1079. move.l d5,$dff0d0
  1080. move.w d7,$dff0d4
  1081. setpervol:
  1082. lea $dff0a6,a5
  1083. move.w (a6)+,(a5)    ;Set period
  1084. move.w (a6)+,2(a5)    ;Set volume
  1085. move.w (a6)+,16(a5)
  1086. move.w (a6)+,18(a5)
  1087. move.w (a6)+,32(a5)
  1088. move.w (a6)+,34(a5)
  1089. move.w (a6)+,48(a5)
  1090. move.w (a6)+,50(a5)
  1091. rts
  1092.  
  1093. NEW_NOTE:
  1094. moveq #0,d5
  1095. move.l 34(a0),a1
  1096. adda.w 40(a0),a1
  1097. cmp.w #64,40(a0)
  1098. bne.s samepat
  1099. move.l (a0),a2
  1100. adda.w 6(a0),a2        ;Point to next sequence row
  1101. cmpa.l 52(a0),a2    ;Is it the end?
  1102. bne.s notend
  1103. move.w d5,6(a0)        ;yes!
  1104. move.l (a0),a2        ;Point to first sequence
  1105. notend:
  1106. moveq #0,d1
  1107. lea    spdtemp(pc),a5
  1108. addq.b #1,(a5)
  1109. cmpi.b #4,(a5)
  1110. bne.s nonewspd
  1111. move.b d5,(a5)
  1112. move.b -1(a1),d1    ;Get new replay speed
  1113. beq.s nonewspd
  1114. lea    respcnt(pc),a5
  1115. move.w d1,(a5)        ;store in counter
  1116. lea    repspd(pc),a5
  1117. move.w d1,(a5)
  1118. nonewspd:
  1119. move.b (a2),d1        ;Pattern to play
  1120. move.b 1(a2),44(a0)    ;Transpose value
  1121. move.b 2(a2),22(a0)    ;Soundtranspose value
  1122.  
  1123. move.w d5,40(a0)
  1124. lsl.w #6,d1
  1125. add.l PATpoint(pc),d1    ;Get pattern pointer
  1126. move.l d1,34(a0)
  1127. addi.w #$000d,6(a0)
  1128. move.l d1,a1
  1129. samepat:
  1130. move.b 1(a1),d1        ;Get info byte
  1131. move.b (a1)+,d0        ;Get note
  1132. bne.s ww1
  1133. andi.w #%11000000,d1
  1134. beq.s noport
  1135. bra.s ww11
  1136. ww1:
  1137. move.w d5,56(a0)
  1138. ww11:
  1139. move.b d5,47(a0)
  1140. move.b (a1),31(a0)
  1141.  
  1142.         ;31(a0) = PORTAMENTO/INSTR. info
  1143.             ;Bit 7 = portamento on
  1144.             ;Bit 6 = portamento off
  1145.             ;Bit 5-0 = instrument number
  1146.         ;47(a0) = portamento value
  1147.             ;Bit 7-5 = always zero
  1148.             ;Bit 4 = up/down
  1149.             ;Bit 3-0 = value
  1150. t_porton:
  1151. btst #7,d1
  1152. beq.s noport
  1153. move.b 2(a1),47(a0)    
  1154. noport:
  1155. andi.w #$007f,d0
  1156. beq.s nextnote
  1157. move.b d0,8(a0)
  1158. move.b (a1),9(a0)
  1159. move.b 32(a0),d2
  1160. moveq #0,d3
  1161. bset d2,d3
  1162. lea    audtemp(pc),a5
  1163. or.w d3,(a5)
  1164. move.w d3,$dff096
  1165. move.b (a1),d1
  1166. andi.w #$003f,d1    ;Max 64 instruments
  1167. add.b 22(a0),d1
  1168. move.l VOLpoint(pc),a2
  1169. lsl.w #6,d1
  1170. adda.w d1,a2
  1171. move.w d5,16(a0)
  1172. move.b (a2),23(a0)
  1173. move.b (a2)+,24(a0)
  1174. move.b (a2)+,d1
  1175. andi.w #$00ff,d1
  1176. move.b (a2)+,27(a0)
  1177. move.b #$40,46(a0)
  1178. move.b (a2)+,d0
  1179. move.b d0,28(a0)
  1180. move.b d0,29(a0)
  1181. move.b (a2)+,30(a0)
  1182. move.l a2,10(a0)
  1183. move.l FRQpoint(pc),a2
  1184. lsl.w #6,d1
  1185. adda.w d1,a2
  1186. move.l a2,18(a0)
  1187. move.w d5,50(a0)
  1188. move.b d5,26(a0)
  1189. move.b d5,25(a0)
  1190. nextnote:
  1191. addq.w #2,40(a0)
  1192. rts
  1193.  
  1194. EFFECTS:
  1195. moveq #0,d7
  1196. testsustain:
  1197. tst.b 26(a0)        ;Is sustain counter = 0
  1198. beq.s sustzero
  1199. subq.b #1,26(a0)    ;if no, decrease counter
  1200. bra.L VOLUfx
  1201. sustzero:        ;Next part of effect sequence
  1202. move.l 18(a0),a1    ;can be executed now.
  1203. adda.w 50(a0),a1
  1204. testeffects:
  1205. cmpi.b #$e1,(a1)    ;E1 = end of FREQseq sequence
  1206. beq.L VOLUfx
  1207. cmpi.b #$e0,(a1)    ;E0 = loop to other part of sequence
  1208. bne.s testnewsound
  1209. move.b 1(a1),d0        ;loop to start of sequence + 1(a1)
  1210. andi.w #$003f,d0
  1211. move.w d0,50(a0)
  1212. move.l 18(a0),a1
  1213. adda.w d0,a1
  1214. testnewsound:
  1215. cmpi.b #$e2,(a1)    ;E2 = set waveform
  1216. bne.s o49c64
  1217. moveq #0,d0
  1218. moveq #0,d1
  1219. move.b 32(a0),d1
  1220. bset d1,d0
  1221. lea    audtemp(pc),a5
  1222. or.w d0,(a5)
  1223. move.w d0,$dff096
  1224. move.b 1(a1),d0
  1225. andi.w #$00ff,d0
  1226. lea SOUNDINFO(pc),a4
  1227. add.w d0,d0
  1228. move.w d0,d1
  1229. add.w d1,d1
  1230. add.w d1,d1
  1231. add.w d1,d0
  1232. adda.w d0,a4
  1233. move.l 60(a0),a3
  1234. move.l (a4),d1
  1235. lea    waveforms(pc),a5
  1236. add.l a5,d1
  1237. move.l d1,(a3)
  1238. move.l d1,68(a0)
  1239. move.w 4(a4),4(a3)
  1240. move.l 6(a4),64(a0)
  1241. swap d1
  1242. move.w #$0003,72(a0)
  1243. tst.w d1
  1244. bne.s o49c52
  1245. move.w #$0002,72(a0)
  1246. o49c52:
  1247. clr.w 16(a0)
  1248. move.b #$01,23(a0)
  1249. addq.w #2,50(a0)
  1250. bra.L o49d02
  1251. o49c64:
  1252. cmpi.b #$e4,(a1)
  1253. bne.s testpatjmp
  1254. move.b 1(a1),d0
  1255. andi.w #$00ff,d0
  1256. lea SOUNDINFO(pc),a4
  1257. add.w d0,d0
  1258. move.w d0,d1
  1259. add.w d1,d1
  1260. add.w d1,d1
  1261. add.w d1,d0
  1262. adda.w d0,a4
  1263. move.l 60(a0),a3
  1264. move.l (a4),d1
  1265. lea    waveforms(pc),a5
  1266. add.l a5,d1
  1267. move.l d1,(a3)
  1268. move.l d1,68(a0)
  1269. move.w 4(a4),4(a3)
  1270. move.l 6(a4),64(a0)
  1271.  
  1272. swap d1
  1273. move.w #$0003,72(a0)
  1274. tst.w d1
  1275. bne.s o49cae
  1276. move.w #$0002,72(a0)
  1277. o49cae:
  1278. addq.w #2,50(a0)
  1279. bra.s o49d02
  1280. testpatjmp:
  1281. cmpi.b #$e7,(a1)
  1282. bne.s testnewsustain
  1283. move.b 1(a1),d0
  1284. andi.w #$00ff,d0
  1285. lsl.w #6,d0
  1286. move.l FRQpoint(pc),a1
  1287. adda.w d0,a1
  1288. move.l a1,18(a0)
  1289. move.w d7,50(a0)
  1290. bra.L testeffects
  1291. testnewsustain:
  1292. cmpi.b #$e8,(a1)    ;E8 = set sustain time
  1293. bne.s o49cea
  1294. move.b 1(a1),26(a0)
  1295. addq.w #2,50(a0)
  1296. bra.L testsustain
  1297. o49cea:
  1298. cmpi.b #$e3,(a1)
  1299. bne.s o49d02
  1300. addq.w #3,50(a0)
  1301. move.b 1(a1),27(a0)
  1302. move.b 2(a1),28(a0)
  1303. o49d02:
  1304. move.l 18(a0),a1
  1305. adda.w 50(a0),a1
  1306. move.b (a1),43(a0)
  1307. addq.w #1,50(a0)
  1308. VOLUfx:
  1309. tst.b 25(a0)
  1310. beq.s o49d1e
  1311. subq.b #1,25(a0)
  1312. bra.s o49d70
  1313. o49d1e:
  1314. subq.b #1,23(a0)
  1315. bne.s o49d70
  1316. move.b 24(a0),23(a0)
  1317. o49d2a:
  1318. move.l 10(a0),a1
  1319. adda.w 16(a0),a1
  1320. move.b (a1),d0
  1321. cmpi.b #$e8,d0
  1322. bne.s o49d4a
  1323. addq.w #2,16(a0)
  1324. move.b 1(a1),25(a0)
  1325. bra.s VOLUfx
  1326. o49d4a:
  1327. cmpi.b #$e1,d0
  1328. beq.s o49d70
  1329. cmpi.b #$e0,d0
  1330. bne.s o49d68
  1331. move.b 1(a1),d0
  1332. andi.l #$003f,d0
  1333. subq.b #5,d0
  1334. move.w d0,16(a0)
  1335. bra.s o49d2a
  1336. o49d68:
  1337. move.b (a1),45(a0)
  1338. addq.w #1,16(a0)
  1339. o49d70:
  1340. move.b 43(a0),d0
  1341. bmi.s o49d7e
  1342. add.b 8(a0),d0
  1343. add.b 44(a0),d0
  1344. o49d7e:
  1345. andi.w #$007f,d0
  1346. lea PERIODS(pc),a1
  1347. add.w d0,d0
  1348. move.w d0,d1
  1349. adda.w d0,a1
  1350. move.w (a1),d0
  1351. move.b 46(a0),d7
  1352. tst.b 30(a0)
  1353. beq.s o49d9e
  1354. subq.b #1,30(a0)
  1355.  
  1356. bra.s o49df4
  1357. o49d9e:
  1358. move.b d1,d5
  1359. move.b 28(a0),d4
  1360. add.b d4,d4
  1361. move.b 29(a0),d1
  1362. tst.b d7
  1363. bpl.s o49db4
  1364. btst #0,d7
  1365. bne.s o49dda
  1366. o49db4:
  1367. btst #5,d7
  1368. bne.s o49dc8
  1369. sub.b 27(a0),d1
  1370. bcc.s o49dd6
  1371. bset #5,d7
  1372. moveq #0,d1
  1373. bra.s o49dd6
  1374. o49dc8:
  1375. add.b 27(a0),d1
  1376. cmp.b d4,d1
  1377. bcs.s o49dd6
  1378. bclr #5,d7
  1379. move.b d4,d1
  1380. o49dd6:
  1381. move.b d1,29(a0)
  1382. o49dda:
  1383. lsr.b #1,d4
  1384. sub.b d4,d1
  1385. bcc.s o49de4
  1386. subi.w #$0100,d1
  1387. o49de4:
  1388. addi.b #$a0,d5
  1389. bcs.s o49df2
  1390. o49dea:
  1391. add.w d1,d1
  1392. addi.b #$18,d5
  1393. bcc.s o49dea
  1394. o49df2:
  1395. add.w d1,d0
  1396. o49df4:
  1397. eori.b #$01,d7
  1398. move.b d7,46(a0)
  1399.  
  1400. ; DO THE PORTAMENTO THING
  1401. moveq #0,d1
  1402. move.b 47(a0),d1    ;get portavalue
  1403. beq.s a56d0        ;0=no portamento
  1404. cmpi.b #$1f,d1
  1405. bls.s portaup
  1406. portadown: 
  1407. andi.w #$1f,d1
  1408. neg.w d1
  1409. portaup:
  1410. sub.w d1,56(a0)
  1411. a56d0:
  1412. add.w 56(a0),d0
  1413. o49e3e:
  1414. cmpi.w #$0070,d0
  1415. bhi.s nn1
  1416. move.w #$0071,d0
  1417. nn1:
  1418. cmpi.w #$06b0,d0
  1419. bls.s nn2
  1420. move.w #$06b0,d0
  1421. nn2:
  1422. moveq #0,d1
  1423. move.b 45(a0),d1
  1424. rts
  1425.  
  1426. pervol: blk.b 16,0    ;Periods & Volumes temp. store
  1427. respcnt: dc.w 0        ;Replay speed counter 
  1428. repspd:  dc.w 0        ;Replay speed counter temp
  1429. firseq:     dc.w 0        ;First sequence
  1430. lasseq:     dc.w 0        ;Last sequence
  1431. audtemp: dc.w 0
  1432. spdtemp: dc.w 0
  1433.  
  1434. V1data:  blk.b 64,0    ;Voice 1 data area
  1435. offset1: blk.b 02,0    ;Is added to start of sound
  1436. ssize1:  blk.b 02,0    ;Length of sound
  1437. start1:  blk.b 06,0    ;Start of sound
  1438.  
  1439. V2data:  blk.b 64,0    ;Voice 2 data area
  1440. offset2: blk.b 02,0
  1441. ssize2:  blk.b 02,0
  1442. start2:  blk.b 06,0
  1443.  
  1444. V3data:  blk.b 64,0    ;Voice 3 data area
  1445. offset3: blk.b 02,0
  1446. ssize3:  blk.b 02,0
  1447. start3:  blk.b 06,0
  1448.  
  1449. V4data:  blk.b 64,0    ;Voice 4 data area
  1450. offset4: blk.b 02,0
  1451. ssize4:  blk.b 02,0
  1452. start4:  blk.b 06,0
  1453.  
  1454. o4a0c8: dc.l $00000000,$00100003,$00200006,$00300009
  1455. SEQpoint: dc.l 0
  1456. PATpoint: dc.l 0
  1457. FRQpoint: dc.l 0
  1458. VOLpoint: dc.l 0
  1459.  
  1460. SILENT: dc.w $0100,$0000,$0000,$00e1
  1461.  
  1462. PERIODS:dc.w $06b0,$0650,$05f4,$05a0,$054c,$0500,$04b8,$0474
  1463.     dc.w $0434,$03f8,$03c0,$038a,$0358,$0328,$02fa,$02d0
  1464.     dc.w $02a6,$0280,$025c,$023a,$021a,$01fc,$01e0,$01c5
  1465.     dc.w $01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d
  1466.     dc.w $010d,$00fe,$00f0,$00e2,$00d6,$00ca,$00be,$00b4
  1467.     dc.w $00aa,$00a0,$0097,$008f,$0087,$007f,$0078,$0071
  1468.     dc.w $0071,$0071,$0071,$0071,$0071,$0071,$0071,$0071
  1469.     dc.w $0071,$0071,$0071,$0071,$0d60,$0ca0,$0be8,$0b40
  1470.     dc.w $0a98,$0a00,$0970,$08e8,$0868,$07f0,$0780,$0714
  1471.     dc.w $1ac0,$1940,$17d0,$1680,$1530,$1400,$12e0,$11d0
  1472.     dc.w $10d0,$0fe0,$0f00,$0e28
  1473.  
  1474. SOUNDINFO:
  1475. ;Offset.l , Sound-length.w , Start-offset.w , Repeat-length.w 
  1476.  
  1477. ;Reserved for samples
  1478.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1479.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1480.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1481.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1482.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1483.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1484.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1485.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1486.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1487.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1488. ;Reserved for synth sounds
  1489.     dc.w $0000,$0000 ,$0010 ,$0000 ,$0010 
  1490.     dc.w $0000,$0020 ,$0010 ,$0000 ,$0010 
  1491.     dc.w $0000,$0040 ,$0010 ,$0000 ,$0010 
  1492.     dc.w $0000,$0060 ,$0010 ,$0000 ,$0010 
  1493.     dc.w $0000,$0080 ,$0010 ,$0000 ,$0010 
  1494.     dc.w $0000,$00a0 ,$0010 ,$0000 ,$0010 
  1495.     dc.w $0000,$00c0 ,$0010 ,$0000 ,$0010 
  1496.     dc.w $0000,$00e0 ,$0010 ,$0000 ,$0010 
  1497.     dc.w $0000,$0100 ,$0010 ,$0000 ,$0010 
  1498.     dc.w $0000,$0120 ,$0010 ,$0000 ,$0010 
  1499.     dc.w $0000,$0140 ,$0010 ,$0000 ,$0010 
  1500.     dc.w $0000,$0160 ,$0010 ,$0000 ,$0010 
  1501.     dc.w $0000,$0180 ,$0010 ,$0000 ,$0010 
  1502.     dc.w $0000,$01a0 ,$0010 ,$0000 ,$0010 
  1503.     dc.w $0000,$01c0 ,$0010 ,$0000 ,$0010 
  1504.     dc.w $0000,$01e0 ,$0010 ,$0000 ,$0010 
  1505.     dc.w $0000,$0200 ,$0010 ,$0000 ,$0010 
  1506.     dc.w $0000,$0220 ,$0010 ,$0000 ,$0010 
  1507.     dc.w $0000,$0240 ,$0010 ,$0000 ,$0010 
  1508.     dc.w $0000,$0260 ,$0010 ,$0000 ,$0010 
  1509.     dc.w $0000,$0280 ,$0010 ,$0000 ,$0010 
  1510.     dc.w $0000,$02a0 ,$0010 ,$0000 ,$0010 
  1511.     dc.w $0000,$02c0 ,$0010 ,$0000 ,$0010 
  1512.     dc.w $0000,$02e0 ,$0010 ,$0000 ,$0010 
  1513.     dc.w $0000,$0300 ,$0010 ,$0000 ,$0010 
  1514.     dc.w $0000,$0320 ,$0010 ,$0000 ,$0010 
  1515.     dc.w $0000,$0340 ,$0010 ,$0000 ,$0010 
  1516.     dc.w $0000,$0360 ,$0010 ,$0000 ,$0010 
  1517.     dc.w $0000,$0380 ,$0010 ,$0000 ,$0010 
  1518.     dc.w $0000,$03a0 ,$0010 ,$0000 ,$0010 
  1519.     dc.w $0000,$03c0 ,$0010 ,$0000 ,$0010 
  1520.     dc.w $0000,$03e0 ,$0010 ,$0000 ,$0010 
  1521.     dc.w $0000,$0400 ,$0008 ,$0000 ,$0008 
  1522.     dc.w $0000,$0410 ,$0008 ,$0000 ,$0008 
  1523.     dc.w $0000,$0420 ,$0008 ,$0000 ,$0008 
  1524.     dc.w $0000,$0430 ,$0008 ,$0000 ,$0008 
  1525.     dc.w $0000,$0440 ,$0008 ,$0000 ,$0008
  1526.     dc.w $0000,$0450 ,$0008 ,$0000 ,$0008
  1527.     dc.w $0000,$0460 ,$0008 ,$0000 ,$0008
  1528.     dc.w $0000,$0470 ,$0008 ,$0000 ,$0008
  1529.     dc.w $0000,$0480 ,$0010 ,$0000 ,$0010
  1530.     dc.w $0000,$04a0 ,$0008 ,$0000 ,$0008
  1531.     dc.w $0000,$04b0 ,$0010 ,$0000 ,$0010
  1532.     dc.w $0000,$04d0 ,$0010 ,$0000 ,$0010
  1533.     dc.w $0000,$04f0 ,$0008 ,$0000 ,$0008
  1534.     dc.w $0000,$0500 ,$0008 ,$0000 ,$0008
  1535.     dc.w $0000,$0510 ,$0018 ,$0000 ,$0018
  1536.  
  1537. WAVEFORMS:
  1538. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1539. dc.w $3f37,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1540. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1541. dc.w $c037,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1542. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1543. dc.w $c0b8,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1544. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1545. dc.w $c0b8,$b027,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1546. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1547. dc.w $c0b8,$b0a8,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1548. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1549. dc.w $c0b8,$b0a8,$a017,$0f07,$ff07,$0f17,$1f27,$2f37
  1550. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1551. dc.w $c0b8,$b0a8,$a098,$0f07,$ff07,$0f17,$1f27,$2f37
  1552. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1553. dc.w $c0b8,$b0a8,$a098,$9007,$ff07,$0f17,$1f27,$2f37
  1554. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1555. dc.w $c0b8,$b0a8,$a098,$9088,$ff07,$0f17,$1f27,$2f37
  1556. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1557. dc.w $c0b8,$b0a8,$a098,$9088,$8007,$0f17,$1f27,$2f37
  1558. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1559. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$0f17,$1f27,$2f37
  1560. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1561. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9017,$1f27,$2f37
  1562. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1563. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$1f27,$2f37
  1564. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1565. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a027,$2f37
  1566. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1567. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$2f37
  1568. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1569. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$b037
  1570. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1571. dc.w $7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1572. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1573. dc.w $817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1574. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1575. dc.w $8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1576. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1577. dc.w $8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1578. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1579. dc.w $8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1580. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1581. dc.w $8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1582. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1583. dc.w $8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1584. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1585. dc.w $8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f
  1586. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1587. dc.w $8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f
  1588. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1589. dc.w $8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f
  1590. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1591. dc.w $8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f
  1592. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1593. dc.w $8181,$8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f
  1594. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1595. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f
  1596. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1597. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$817f,$7f7f
  1598. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1599. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$7f7f
  1600. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1601. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$807f
  1602. dc.w $8080,$8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f
  1603. dc.w $8080,$8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f
  1604. dc.w $8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1605. dc.w $8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1606. dc.w $8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1607. dc.w $8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1608. dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1609. dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1610. dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1611. dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1612. dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1613. dc.w $4545,$797d,$7a77,$7066,$6158,$534d,$2c20,$1812
  1614. dc.w $04db,$d3cd,$c6bc,$b5ae,$a8a3,$9d99,$938e,$8b8a
  1615. dc.w $4545,$797d,$7a77,$7066,$5b4b,$4337,$2c20,$1812
  1616. dc.w $04f8,$e8db,$cfc6,$beb0,$a8a4,$9e9a,$9594,$8d83
  1617. dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1618. dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1619. dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1620. dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1621. dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1622.  
  1623. MODULE:        blk.b    7000,$ff
  1624.  
  1625.  
  1626. setf:blk.b 4,0
  1627. set:
  1628. set1:blk.b 256
  1629. set2:blk.b 256
  1630. set3:blk.b $b0
  1631. set4:blk.b $b0
  1632. set5:blk.b $80
  1633. set6:blk.b $80
  1634. fonts:blk.b 588
  1635. si:
  1636. sin:blk.b $200
  1637. cos:blk.b 2048
  1638. vide:blk.b 32,0
  1639.  
  1640. jug:
  1641. dc.w 0,500,0,0,0,0
  1642. dc.w 0,1180,0    ;tete
  1643. dc.W 0,700,0
  1644. ;dc.w 350,550,0,400,300,0,400,50,0
  1645. dc.w 350,550,0,500,380,0,650,220,0
  1646.  
  1647. dc.w -350,550,0,-400,300,0,-400,50,0
  1648. dc.W 300,-250,100,-300,-250,100
  1649. dc.W 300,-480,100,300,-710,100
  1650. dc.W -300,-480,100,-300,-710,100
  1651. dc.w 300,-940,90,300,-1170,60
  1652. dc.w -300,-940,90,-300,-1170,60
  1653. dc.W 300,-1400,20,-300,-1400,20
  1654. ;dc.w 90,1080,100,-90,1080,100
  1655. hand:;dc.w 400,50,200,400,50,350,400,50,470
  1656. dc.w 520,100,0,370,25,0,220,-50,0
  1657.  
  1658. dc.w -400,-25,200,-400,-100,350,-400,-150,470
  1659. boules:dc.w -400,-250,470
  1660. dc.w 110,1070,190,-110,1070,190
  1661. dc.w $7777
  1662.  
  1663. coord:blk.w 138,0
  1664. ordre:dc.w 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
  1665. dc.w 15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,$7777
  1666.  
  1667. bra1:dc.w $200
  1668.  
  1669. bo:dc.L bob1,mask1,bob2,mask2
  1670. dc.l bob8,mask8    ;changer (tete)
  1671. dc.L bob3,mask3
  1672. dc.l bob5,mask5,bob5,mask5,bob5,mask5
  1673. dc.l bob5,mask5,bob5,mask5,bob5,mask5
  1674. dc.l bob4,mask4,bob4,mask4
  1675. dc.l bob5,mask5,bob5,mask5
  1676. dc.l bob5,mask5,bob5,mask5
  1677. dc.l bob5,mask5,bob5,mask5
  1678. dc.l bob5,mask5,bob5,mask5
  1679. dc.l bob5,mask5,bob5,mask5
  1680. ;dc.l bob7,mask7,bob7,mask7
  1681. dc.l bob5,mask5,bob6,mask6,bob7,mask7
  1682. dc.l bob5,mask5,bob6,mask6,bob7,mask7
  1683.  
  1684. dc.L bob9,mask9    ;boules
  1685. dc.L bob7,mask7,bob7,mask7
  1686. val:blk.w 35
  1687. bobs:
  1688. bob1:blk.b 576
  1689. bob2:blk.b 576
  1690. bob3:blk.b 192
  1691. bob4:blk.b 192
  1692. bob5:blk.b 192
  1693. bob6:blk.b 192
  1694. bob7:blk.b 192
  1695. bob8:blk.b 576
  1696. bob9:blk.b 192
  1697.  
  1698. logo:blk.b 4752
  1699.  
  1700. masks:
  1701. mask1:
  1702. mask2=mask1+576
  1703. mask3=mask2+576
  1704. mask4=mask3+192
  1705. mask5=mask4+192
  1706. mask6=mask5+192
  1707. mask7=mask6+192
  1708. mask8=mask7+192
  1709. mask9=mask8+576
  1710. bp1=$50000
  1711. ;bp2=bp1+11638
  1712. bp5=$56000
  1713. bp3=$60000
  1714. bp4=$70000
  1715. bpv=$6b000
  1716. >extern "set1",set
  1717. >extern "mod.thalion",module
  1718. >extern "sincos",si
  1719. >extern "fonts",fonts
  1720. >extern "bobs",bobs
  1721. >extern "logo44",logo
  1722.